#pragma once
#include "DXAMLCommon.h"
#include "ComponentResourceLocation.h"

struct IPALUri
{
public:
	virtual ~IPALUri() = 0;
	virtual XUINT32 AddRef() = 0;
	virtual XUINT32 Release() = 0;
	virtual HRESULT Clone(IPALUri ** ppUri) = 0;
	virtual HRESULT Combine(unsigned int cUri, XCHAR * pUri, IPALUri **ppUriCombine) = 0;
	virtual HRESULT CreateBaseURI(IPALUri **ppBaseUri) = 0;
	virtual HRESULT GetCanonical(CXString **ppstrCanonical) = 0;
	virtual HRESULT GetCanonical(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetExtension(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetFileName(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetHost(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetPunycodeHost(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetPassword(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetPath(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetScheme(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetUsername(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetQueryString(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT GetPortNumber(unsigned int *pPortNumber) = 0;
	virtual HRESULT GetZone(unsigned int *pZone) = 0;
	virtual HRESULT SetRangeRequest(unsigned int rangeStart, unsigned int rangeStop) = 0;
	virtual HRESULT GetRangeRequest(unsigned int *pRangeStart, unsigned int *pRangeStop) = 0;
	virtual HRESULT IsSafeForPathComparison() = 0;
	virtual HRESULT GetFilePath(unsigned int *pBufferLength, XCHAR * pszBuffer) = 0;
	virtual HRESULT TransformToMsResourceUri(IPALUri **ppUri) = 0;
	virtual void SetComponentResourceLocation(ComponentResourceLocation::Enum location) = 0;
	virtual ComponentResourceLocation::Enum GetComponentResourceLocation() = 0;
};